package msigraphx.gibbsSampler;

import java.util.List;
import java.util.Vector;

import com.rits.cloning.Cloner;

public class Sample<Type> implements Cloneable {
	public List<RandomVariableValue<Type>> values;
	
	public Sample() {
		values = new Vector<RandomVariableValue<Type>>();
	}
	
	public void initRand(List<RandomVariable<Type>> randVarList) {
		RandomVariableValue<Type> randVarVal;
		RandomVariable<Type> randVar;
		for(int k=0; k<randVarList.size(); ++k) {
			randVar = randVarList.get(k);
			randVarVal = new RandomVariableValue<Type>(randVar);
			values.add(randVarVal);
		}
	}
	
	public List<RandomVariableValue<Type>> getWithoutVar(int varIndex) {
		List<RandomVariableValue<Type>> valuesWOVar = new Vector<RandomVariableValue<Type>>();
		for(RandomVariableValue<Type> val : values) {
			valuesWOVar.add(val);
		}
		valuesWOVar.remove(varIndex);
		return valuesWOVar;
	}
	
	public void replaceVarVal(int varIndex, RandomVariableValue<Type> varValue) {
		values.set(varIndex, varValue);
	}
	
	public Object clone() {
		/*Cloner cloner = new Cloner();
		return cloner.deepClone(this);*/
		Sample<Type> newVal = new Sample<Type>();
		for(RandomVariableValue<Type> val : this.values) {
			newVal.values.add(val);
		}
		return newVal;
	}
	
	public String toString() {
		return values.toString();
	}
}